package model

import (
	"gorm.io/gorm"
	"time"
)

// BaseModel 是所有模型的基础模型，包含常用的字段，如 ID、创建时间、更新时间、删除时间和删除标志
type BaseModel struct {
	ID        int32          `gorm:"primary_key;AUTO_INCREMENT"` // 主键，自动递增
	CreatedAt time.Time      `gorm:"column:create_time"`         // 记录创建时间，数据库列名为 create_time
	UpdatedAt time.Time      `gorm:"column:update_time"`         // 记录更新时间，数据库列名为 update_time
	DeletedAt gorm.DeletedAt // 软删除时间，GORM 内置类型，用于支持软删除
	IsDeleted bool           // 标记该记录是否被删除，通常用于标记已删除但不实际删除的记录
}

// User 表示用户模型，包含用户的基本信息和状态
type User struct {
	BaseModel            // 嵌入 BaseModel，继承基础字段
	Mobile    string     `gorm:"unique;type:varchar(11);not null"`             // 手机号码，唯一索引，非空，varchar 类型，长度为 11
	Password  string     `gorm:"type:varchar(100);not null"`                   // 密码，非空，varchar 类型，长度为 100
	NickName  string     `gorm:"type:varchar(20)"`                             // 昵称，varchar 类型，长度为 20，可空
	Birthday  *time.Time `gorm:"type:datetime"`                                // 生日，datetime 类型，可空
	Gender    string     `gorm:"type:varchar(6);column:gender;default:'male'"` // 性别，varchar 类型，默认值为 'male'，支持 'female' 和 'male'，并且有详细注释
	Role      int        `gorm:"type:int(2);column:role;default:1"`            // 角色，整数类型，默认值为 1，1 表示普通用户，2 表示管理员
	Email     string     `gorm:"type:varchar(100);column:email;default:''"`
}

// TableName 设置 GORM 生成的表名
func (User) TableName() string {
	return "user"
}
